(function ($) {
    const PDF_BTN_SELECTOR = '.btn-download-pdf-button';
    const printStyleId = 'print-custom-style';

    /**
     * 打印生成器
     */
    class PrintGenerator {
        /**
         * 构造函数
         */
        constructor() {
            this.isPrinting = false;

            this.init();
        }

        /**
         * 初始化
         */
        init() {
            this.setupPrintEvents();
        }

        /**
         * 准备打印布局
         */
        preparePrintLayout() {
            const $container = $('#original-content-container');

            if (!$container.length) {
                $('<div>', { id: 'original-content-container' })
                    .css('display', 'none')
                    .appendTo('body');
            }

            // 移动正文内容到容器中
            const $originalContent = $('body > *').not('#original-content-container');
            if ($originalContent.length) {
                $container.append($originalContent);
            }
            // 去掉代码块隐藏
            $('.dropdown.toggle').removeClass('toggle-hidden');
        }

        /**
         * 恢复原始布局
         */
        restoreOriginalLayout() {
            // 移除页脚样式
            $(`#${printStyleId}`).remove();
            // 恢复代码块隐藏
            $('.dropdown.toggle').addClass('toggle-hidden');
            // 恢复正文内容
            const $container = $('#original-content-container');
            if ($container.length) {
                $container.children().appendTo('body');
                $container.remove();
            }
        }

        /**
         * 打印前的准备
         */
        beforeprint() {
            if (this.isPrinting) return;
            this.isPrinting = true;

            this.preparePrintLayout();

            setTimeout(() => {
                $('body')[0].offsetHeight;
            }, 100);
        }

        /**
         * 打印完成后的处理
         */
        afterprint() {
            this.isPrinting = false;
            this.restoreOriginalLayout();
        }

        /**
         * 设置打印事件
         */
        setupPrintEvents() {
            try {
                this.beforeprint();
                window.print();
            } finally {
                this.afterprint();
            }
        }
    }

    /**
     * 初始化打印生成器
     */
    function initPrintGenerator() {
        new PrintGenerator();
    }

    /**
     * PDF生成器初始化
     */
    function initGenerator() {
        // 确保DOM完全加载
        const checkReady = setInterval(() => {
            if ($(PDF_BTN_SELECTOR).length > 0) {
                clearInterval(checkReady);

                // 清空原有事件
                $(PDF_BTN_SELECTOR).attr("onclick", "")
                // 绑定点击事件
                $(PDF_BTN_SELECTOR).on('click', function() {
                    // 创建新打印实例
                    initPrintGenerator();
                });

                // 监听 Ctrl + P 或 CMD + P 快捷键事件
                $(document).on('keydown', (e) => {
                if ((e.ctrlKey || e.metaKey) && e.key === 'p') {
                        e.preventDefault(); // 阻止默认打印对话框
                        initPrintGenerator();
                    }
                });
                // console.debug('[system] PDF 生成器初始化完成');
            }
        }, 100);
    }

    // 页面加载完成后初始化生成器
    if (document.readyState === 'complete') {
        initGenerator();
    } else {
        document.addEventListener('DOMContentLoaded', initGenerator);
    }
})(jQuery);